package main

import (
	"fmt"
	"gin_server/config"
	"gin_server/internal/router"
	"gin_server/pkg/database"
	"gin_server/pkg/email"
	"gin_server/pkg/redis"
	"os"

	"github.com/gin-gonic/gin"
)

// @title gin server API
// @version 1.0
// @description gin server API文档
// @BasePath /api
// @securityDefinitions.apikey BearerAuth
// @in header
// @name Authorization
// @description JWT认证，格式为: Bearer {token}

func main() {
	// 获取环境变量，默认为development
	env := os.Getenv("APP_ENV")
	if env == "" {
		env = "development"
	}

	// 初始化配置
	config.InitConfig(env)

	// 设置Gin运行模式
	if config.AppConfig.Server.Mode == "release" {
		gin.SetMode(gin.ReleaseMode)
	} else {
		gin.SetMode(gin.DebugMode)
	}

	// 初始化数据库
	database.InitDB()
	defer database.Close()

	// 初始化Redis
	redis.InitRedis()
	defer redis.Close()

	// 初始化Email
	email.InitEmailConfig(
		config.AppConfig.Email.Host,
		config.AppConfig.Email.Port,
		config.AppConfig.Email.Username,
		config.AppConfig.Email.Password,
	)

	router := router.SetupRouter()

	router.GET("/", func(c *gin.Context) {
		c.String(200, "welcome to gin server")
	})

	// 创建独立的gin引擎实例用于静态文件服务
	staticEngine := gin.Default()
	// 配置静态文件路由
	staticEngine.Static("/static", config.AppConfig.Upload.UploadDir)
	// 在单独的goroutine中启动静态文件服务器
	go func() {
		staticPort := fmt.Sprintf(":%d", config.AppConfig.Upload.StaticServer.Port)
		fmt.Printf("静态文件服务器启动在端口 %s\n", staticPort)
		if err := staticEngine.Run(staticPort); err != nil {
			fmt.Printf("静态文件服务器启动失败: %v\n", err)
		}
	}()

	// 启动服务器
	port := fmt.Sprintf(":%d", config.AppConfig.Server.Port)
	router.Run(port)
}
